package com.fjwt.gz.service.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fjwt.gz.db.dto.FansDTO;
import com.fjwt.gz.db.entity.ScoreRecordTotalEntity;
import com.fjwt.gz.db.vo.ExportAwardVO;
import com.fjwt.gz.db.vo.ScoreRecordTotalVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 积分变动记录汇总表 Mapper 接口
 * </p>
 *
 * @author shiyonghao
 * @since 2025-04-09
 */
public interface ScoreRecordTotalMapper extends BaseMapper<ScoreRecordTotalEntity> {

    /**
     * 校验用户是否签到
     * @param fansId
     * @return
     */
    List<ScoreRecordTotalEntity> checkSign(@Param("fansId") Long fansId, @Param("ruleId")Long ruleId, @Param("infoType") String infoType);

    /**
     * 查询用户签到记录
     * @return
     */
    List<ScoreRecordTotalEntity> findSignRecordList(@Param("fansId") Long fansId,@Param("ruleId") Long ruleId, @Param("infoType") String infoType,@Param("time")  String time);

    /**
     * 获取当天获得福分总量
     * @param fansId
     * @return
     */
    int getUserScoreSum(@Param("fansId") Long fansId, @Param("appId") String appId);

    /**
     * 校验用户是否连续签到
     * @param fansId
     * @param ruleKey
     * @return
     */
    int checkSignLink(@Param("fansId") Long fansId,@Param("ruleId") Long ruleId,@Param("ruleKey") String ruleKey,@Param("day") int day);

    /**
     * 获取用户新增，消耗积分记录
     * @param fansId
     * @param flag
     * @return
     */
    IPage<ScoreRecordTotalEntity> findFansScoreRecord(IPage iPage,@Param("fansId") Long fansId,@Param("flag") String flag,@Param("appId") String appId);


    /**
     * 获取会员详细福分情况
     */
    IPage<ScoreRecordTotalVO> getRecordOfBlessings(IPage iPage, @Param("fansDTO") FansDTO fansDTO);

    /**
     * 获取会员详细福分情况
     */
    List<ScoreRecordTotalVO> getRecordOfBlessingplus(@Param("fansDTO") FansDTO fansDTO);

    /**
     * 获取用户兑换记录
     * @param iPage
     * @param fansId
     * @param flag
     * @return
     */
    IPage<ScoreRecordTotalEntity> getExchangeScore(IPage iPage, @Param("fansId") Long fansId,@Param("flag") String flag);

    /**
     * 检验用户是否实名
     * @param fansId
     * @param infoType
     * @return
     */
    ScoreRecordTotalEntity checkAuth(@Param("fansId") Long fansId,@Param("infoType") String infoType);

    /**
     * ACTE008福分信息
     * @param activityId
     * @return
     */
    List<ExportAwardVO> exportACTE008ScoreAward(Long activityId);

    /**
     * 福分奖品
     * @param activityId
     * @return
     */
    List<ExportAwardVO> exportScoreAward(Long activityId);

    /**
     * 获取用户积分记录
     * @param iPage
     * @param phone
     * @param nickName
     * @return
     */
    IPage<ScoreRecordTotalVO> getFansScoreRecord(IPage iPage,@Param("phone") String phone,@Param("nickName") String nickName,
                                                     @Param("sTime") String sTime,@Param("eTime")String eTime);

    /**
     * 统计 acte017 用户记录表 B2
     * @param acteIdList
     * @param fansIdList
     * @param appIdList
     * @return
     */
    List<Map<String, Object>> getScoreCount(@Param("acteIdList") List<Long> acteIdList, @Param("fansIdList") List<Long> fansIdList, @Param("appIdList") List<String> appIdList);
    /**
     * 福分明细统计
     * @param time 统计时间
     * @return
     */
    List<ScoreRecordTotalVO> selectDailyScoreRecords(@Param("time") String time);
}
